<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/10/16 0016
 * Time: 下午 10:35
 */

namespace App\Http\Controllers\Content\System;


use App\Models\ArticleModel;
use App\Models\CategoryModel;
use App\Models\ContentSlide;

class Tag
{
//    定义一个属性property用来存放创建自定义标签指令的方法
    protected $directives = ['lists','category','slide'];
    //定义一个创建自定义标签指令的方法
    public function make()
    {
//        通过使用array_map()函数,将上面需要自动创建的标签指令数组中的键值依次传递给前面的闭包函数依次执行
        array_map(function ($directive) {
            $this->$directive();
        }, $this->directives);
    }
//        读取部分文章内容的自定义标签指令
        protected function lists(){
//        laravel框架中通过下面的名称创建自定义的标签命令
        \Blade::directive('list',function($expression){
            //首先判断用户在使用自定义标签命令的时候是否传递了参数
            //如果$expression不为null就取$expression,但如果为null就取空数组
            $expression  = $expression??[];
            return <<<mytag
            <?php
            \$par  = $expression;
            //先将文章表中的所有数据拿出来给\$data;
            \$data = App\Models\ArticleModel::latest();
            //判断使用自定义的标签指令的时候是否限制了cid,指定取哪些栏目的文章
            if(isset(\$par['cid'])){
                \$data->whereIn('category_id',\$par['cid']);
            }
            //判断是否限制了要取的条数
            if (isset(\$par['limit'])){
                \$data->limit(\$par['limit']);
            }
            //通过文章模型对象的get()方法将通过上面过滤后的文章内容都拿过来
            \$articles = \$data->get();       
            foreach (\$articles as \$mytag):
                \$mytag['url'] = route('content.home.content',\$mytag)
            ?>    
mytag;
        });
        \Blade::directive('endlist',function(){
            return <<<mytag
        <?php endforeach; ?>
mytag;
        });
        }

//        定义栏目标签指令的方法
        protected function category(){
        \Blade::directive('category',function ($expression){
            $expression = $expression ? $expression :[];
            return <<<mytag
            <?php
            \$params = $expression;
            \$db = App\Models\CategoryModel::latest();
            if(isset(\$params['cid'])){
                \$db->whereIn('id',\$params['cid']);
            }
            if(isset(\$params['limit'])){
                \$db->limit(\$params['limit']);
            }
            \$articles = \$db->get();
            foreach (\$articles as \$mytag):
                \$mytag['url']= route('content.home.category',\$mytag);
            ?>

mytag;
        });
        \Blade::directive('endcategory',function (){
           return <<<mytag
            <?php endforeach; ?>
mytag;
        });
        }


//        定义幻灯片标签指令的方法
        protected  function slide(){
        \Blade::directive('slide',function ($expression){
            $expression = $expression?$expression:0;
            return <<<mytag
            <?php foreach(App\Models\ContentSlide::get() as \$mytag):?>            
mytag;
        });
        \Blade::directive('endslide',function (){
            return "<?php endforeach;  ?>";
        });
        }


}